home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / pluginy Firefox / 722 / 722.xpi / chrome / noscript.jar / content / noscript / html5_events.pl < prev    next >
Perl Script  |  2010-02-12  |  1KB  |  71 lines

  1. #!/usr/bin/perl
  2. use strict;
  3. use LWP::Simple;
  4. use RegExp::List;
  5. use File::stat;
  6. use File::Basename;
  7.  
  8. my $HTML5_URL = "http://mxr.mozilla.org/mozilla-central/source/parser/html/nsHtml5AtomList.h?raw=1";
  9.  
  10. my $SOURCE_FILE = dirname($0) . '/RequestWatchdog.js';
  11.  
  12. sub create_re
  13. {
  14.   my $cache = "/tmp/html5_events.re";
  15.   my $sb = stat($cache);
  16.   
  17.   if ($sb && time() - $sb->mtime < 86400)
  18.    {
  19.     open IN, "<$cache";
  20.     my @content = <IN>;
  21.     close IN;
  22.     return $content[0];
  23.   }
  24.   
  25.     my $content =  get $HTML5_URL or die ("Couldn't fetch $HTML5_URL");
  26.     $content =~ s/.*"(on\w+)".*/$1 /g;
  27.     $content =~ s/HTML.*//g;
  28.     $content =~ s/\s+/ /g;
  29.     $content =~ s/^\s+|\s+$//g;
  30.     my $l  = Regexp::List->new;
  31.     my $re = $l->list2re(split(' ', $content));
  32.     $re =~ s/\(\?-xism:(.*)\)/$1/;
  33.   open (OUT, ">$cache");
  34.   print OUT $re;
  35.   close OUT;
  36.   $re;
  37. }
  38.  
  39. sub patch
  40. {
  41.   my $src = shift;
  42.   my $dst = "$src.tmp";
  43.   my $re = create_re();
  44.   my $must_replace = 0;
  45.   print "Patching $src...\n";
  46.   open IN, "<$src" or die ("Can't open $src!");
  47.   open OUT, ">$dst"  or die ("Can't open $dst!");
  48.   
  49.   while (<IN>)
  50.   {
  51.     my $line = $_;
  52.     $must_replace = $line ne $_ if s/^(\s*const IC_EVENT_PATTERN\s*=\s*")([^"]+)/$1$re/;
  53.     
  54.     print OUT $_;
  55.   }
  56.   close IN;
  57.   close OUT;
  58.   
  59.   if ($must_replace) {
  60.     rename $dst, $src;
  61.     print "Patched.\n";
  62.   }
  63.   else
  64.   {
  65.     unlink $dst;
  66.     print "Nothing to do.\n";
  67.   }
  68. }
  69.  
  70. patch($SOURCE_FILE);
  71.